/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbean;

import ejb.cliente.CarrelloEJBLocal;
import ejb.cliente.ClienteEJBLocal;
import ejb.common.DettaglioOrdineManagerLocal;
import ejb.common.DettaglioPrezzoManagerLocal;
import ejb.common.NegozioManagerLocal;
import ejb.common.OrdineManagerLocal;
import ejb.common.SpeseSpedizioneManagerLocal;
import entity.Cliente;
import entity.Comune;
import entity.DettaglioOrdine;
import entity.Negozio;
import entity.Ordine;
import entity.Provincia;
import facade.ProvinciaFacade;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;

/**
 *
 * @author Antonio
 */
public class GestioneCliente implements Serializable {
    @EJB
    private OrdineManagerLocal ordineManager;
    @EJB
    private NegozioManagerLocal negozioManager;
    @EJB
    private DettaglioOrdineManagerLocal dettaglioOrdineManager;

    @EJB
    private SpeseSpedizioneManagerLocal speseSpedizioneManager;
    @EJB
    private DettaglioPrezzoManagerLocal dettaglioPrezzoManager;
    @EJB
    private ProvinciaFacade provinciaFacade;
    @EJB
    private ClienteEJBLocal clienteEJB;

    public Negozio getNegozio() {
        return clienteEJB.getNegozioScelto();
    }

    public void setNegozio(Negozio n) {
        this.clienteEJB.setNegozioScelto(n);
    }

    public boolean isLogged() {
        return clienteEJB.isLogged();
    }

    public void setId(Long id) {
        clienteEJB.setId(id);
    }// setNome

    public void setNome(String nome) {

        clienteEJB.setNome(nome);
    }// setNome

    public void setIdNegozio(Long negozio) {
        clienteEJB.setIdNegozioScelto(negozio);
    }// setNegozio

    public Long getIdNegozio() {
        return clienteEJB.getIdNegozioScelto();
    }

    public String getNome() {

        return clienteEJB.getNome();
    }// getNome

    public Long getId() {

        return clienteEJB.getId();
    }

    public void setComune(Comune c) {
        clienteEJB.setComune(c);
    }

    public Comune getComune() {
        return clienteEJB.getComune();
    }

    public void setProvincia(Provincia p) {
        clienteEJB.setProvincia(p);
    }

    public void handleComuni() {
        if (clienteEJB.getProvincia().getComuni() == null) {
            throw new IllegalStateException();
        }
    }

    public Provincia getProvincia() {
        return clienteEJB.getProvincia();
    }

    public void setIdProvincia(Long idProvincia) {
        clienteEJB.setIdProvincia(idProvincia);
    }

    public List<Comune> getComuni() {
        if (clienteEJB.getIdProvincia() != null) {
            return clienteEJB.getProvincia().getComuni();
        }
        return null;
    }

    public List<Provincia> getProvince() {
        return provinciaFacade.findAll();
    }

    public List<Negozio> getNegozi() {
        if (clienteEJB.getIdComune() != null) {
            return clienteEJB.getComune().getNegozi();
        }
        return null;
    }

    public void setIdComune(Long idComune) {
        clienteEJB.setIdComune(idComune);
    }

    public Long getIdProvincia() {
        return clienteEJB.getIdProvincia();
    }

    public Long getIdComune() {
        return clienteEJB.getIdComune();
    }

    public Cliente getCliente() {
        return this.clienteEJB.getCliente();
    }

    public boolean isNegozioValido() {
        return clienteEJB.controlloNegozioValido();
    }

    /**
     * Creates a new instance of GestioneCliente
     */
    public GestioneCliente() {
    }

    public CarrelloEJBLocal getCarrello() {
        return clienteEJB.getCarrelloEJB();
    }

    public String verificaAccesso() {

        System.out.println("Suca forte forte");
        if (clienteEJB.getId() != null) {

            return "AccessoCliente";
        }
        return "";
    }// verificaAccesso

    public String statoFormattato(Ordine o) {
        String res = o.getStato().toString();
        res = res.replace("_", " ");
        res = res.toUpperCase();
        return res;
    }

    public Float speseSpedizione(Ordine o) {
        return speseSpedizioneManager.getSpeseSpedizione(o.getNegozio().getId()).getPrezzo();
    }

    public Float subtotale(Ordine o) {
        Float tmp = speseSpedizione(o);
        return o.getTotale() - tmp;
    }

    public List<Ordine> getOrdiniCliente() {
        return clienteEJB.getOrdiniCliente();
    }

    public List<DettaglioOrdine> dettaglioOrdine(Ordine o) {
        return dettaglioOrdineManager.ottieniDaOrdine(o.getId());
    }

    public Float prezzoProdotto(Ordine o, DettaglioOrdine deo) {
        return dettaglioPrezzoManager.prezzoProdotto(o.getNegozio().getId(), deo.getProdotto().getCodiceBarre());
    }
    
    public CartesianChartModel getGrafifoNegozi(){
        Long idCliente;
        if((idCliente=clienteEJB.getId() ) == null){
            return new CartesianChartModel();
        }
        CartesianChartModel model=new CartesianChartModel();
        ChartSeries serie=new ChartSeries("Numeri ordini");
        List<Negozio> negoziDelCliente = negozioManager.cercaNegoziDelCliente(idCliente);
        for(Negozio n:negoziDelCliente){
            System.out.println(negozioManager.getNumeroOrdini(idCliente, n.getId()));
            serie.set(n.getNome(), negozioManager.getNumeroOrdini(idCliente, n.getId()));
        }
        model.addSeries(serie);
        return model;
    }
    
    public int getMaxOrdini(){
        if(clienteEJB.getId()==null){
            return 0;
        }
        Long l=ordineManager.getMaxOrdini(clienteEJB.getId());
        return l.intValue();
    }
}
